<%@ tag import="java.util.Map" %>
<%@taglib prefix="b" tagdir="/WEB-INF/tags/base" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%--表单name--%>
<%@ attribute name="_name" required="true" type="java.lang.String" %>
<%--表单id--%>
<%@ attribute name="_id" required="false" type="java.lang.String" %>
<c:set var="_id" value="${empty _id ? _name : _id}"/>
<%--input占位符--%>
<%@ attribute name="_placeholder" required="false" type="java.lang.String" %>
<%--默认值--%>
<%@ attribute name="_value" required="false" type="java.lang.Object" %>
<%--是否必填项--%>
<%@ attribute name="_required" required="false" type="java.lang.Boolean" %>
<%--input class,如果有则使用--%>
<%@ attribute name="_inputClass" required="false" type="java.lang.String" %>
<%--<c:set var="_inputClass" value="${empty _inputClass? '':_inputClass}"/>--%>


<%--可迭代项,可以为Map或Collection,如果是Map,取key为option的value,取value为option的text--%>
<%@attribute name="_items" type="java.lang.Object" required="true" %>
<%--如果是collction,取元素的这个这个属性为option的value--%>
<%--    例如,person对象有属性id和name,要做到<option value="${persion.id}">${person.name}</option>      --%>
<%--    则应该使valuePropertyName="id",propertyName="name"                                           --%>
<%@attribute name="_valuePropertyName" type="java.lang.String" required="false" %>
<%@attribute name="_propertyName" type="java.lang.String" required="false" %>


<select name="${_name}" id="${_id}" data-placeholder="${_placeholder}" class="${_inputClass}">
    <c:choose>
        <c:when test="<%=_items instanceof Map%>">
            <c:forEach items="${_items}" var="i" varStatus="iStat">
                <c:set var="currentValue" value="${i.key}"/>
                <option value="${currentValue}" <c:if test="${currentValue eq _value}">selected</c:if> >${i.value}</option>
            </c:forEach>
        </c:when>
        <c:when test="<%=_items instanceof Iterable%>">
            <c:forEach items="${_items}" var="i" varStatus="iStat">
                <c:set var="currentValue" value="${i[_valuePropertyName]}"/>
                <option value="${currentValue}" <c:if test="${currentValue eq _value}">selected</c:if> >${i[_propertyName]}</option>
            </c:forEach>
        </c:when>
        <c:otherwise>
            items不是可迭代对象
        </c:otherwise>
    </c:choose>
</select>
